package com.dys.testjdk9;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
import java.util.List;

/**
 * @className: com.dys.testjdk9.ListOf
 * @description: 只读集合
 * @author: pine cone
 * @version: v1.0.0
 * @createTime: 2024/09/04 下午9:37
 */
public class ListOf {

    /**
     * 这是一个main()方法,是应用程序的入口
     *
     * @param args 方法的形参列表,是一个字符串数组,包含了从命令行传递给程序的参数
     */
    public static void main(String[] args) {
        // testJava8List();
        testJava9ListOf();
    }

    /**
     * JAVA8 要创建一个只读,不可改变的集合,必须构造和分配他,然后添加元素,然后再包装成一个不可修的集合
     * 放入数据后,然后要通过unmodifiableList才能让集合变为只读集合,不能表达为单个的表达式
     */
    private static void testJava8List() {
        List<Integer> list = new ArrayList<>();
        list.add(10);
        list.add(20);
        list.add(30);
        list.add(40);
        System.out.println("非只读集合--------");
        list.forEach(System.out::println);
        // 转为只读集合
        List<Integer> list2 = Collections.unmodifiableList(list);
        System.out.println("转为只读集合----------");
        // UnsupportedOperationException
        list2.add(100);
        list2.forEach(System.out::println);
        // 只读集合
        System.out.println("只读集合---------");
        List<Integer> list1 = Arrays.asList(10, 20, 30, 40);
        // UnsupportedOperationException
        // list1.add(100);
        list1.forEach(System.out::println);
    }

    /**
     * JAVA9 通过集合工厂方法,创建一个只读集合,只要通过新增的of方法即可完成创建
     */
    private static void testJava9ListOf() {
        List<String> list = List.of("TOM", "Jerry", "Mark", "Ben");
        // UnsupportedOperationException
        // list.add("111");
        list.forEach(System.out::println);
    }
}
